import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import { createHtmlPlugin } from 'vite-plugin-html'


export default defineConfig(({mode, command}) => {

  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), '')
  // 判断是否是开发模式
  const isDev = command === 'serve'

  return {
    // 基础路径
    base: './',

    // 开发服务器配置
    server: {
      port: 3000,
      host: true, // 监听所有地址
      open: true, // 自动打开浏览器
      cors: true, // 允许跨域

      // 热更新配置
      hmr: {
        overlay: true // 显示错误 overlay
      },

      // 代理配置（如果需要）
      proxy: {
        '/api': {
          target: 'http://localhost:8080',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
        }
      }
    },

    // 预览服务器配置
    preview: {
      port: 4173,
      host: true,
      open: true
    },

    // 设置为库模式
    build: {
      outDir: 'dist',
      sourcemap: isDev ? 'inline' : false, // 开发环境生成 sourcemap
      minify: isDev ? false : 'esbuild', // 开发环境不压缩
      cssCodeSplit: false, // 不拆分 CSS
      // 解析配置
      resolve: {
        alias: {
          '@': path.resolve(__dirname, 'src'),
        }
      },
      css: {
        // 开发环境生成 sourcemap
        devSourcemap: isDev,
        // 配置预处理器
        preprocessorOptions: {
          less: {
            math: 'always', // 启用数学运算
            javascriptEnabled: true // 启用 JavaScript 表达式
          }
        },
        // PostCSS 配置
        postcss: {
          plugins: [
            require('autoprefixer')(),
            require('cssnano')({
              preset: 'default'
            })
          ]
        }
      },
      // 确保 Rollup 知道如何处理 CSS
      rollupOptions: {
        // 不将依赖打包到库中
        external: [],
        input: {
          main: path.resolve(__dirname, 'index.html'),
          styles: path.resolve(__dirname, 'src/index.less')
        },
        output: {
          // 重点：确保只输出 CSS 文件
          assetFileNames: (assetInfo) => {
            if (assetInfo.name.endsWith('.css')) {
              return isDev ? 'harmony-style.min.css' : "harmony-style.css"
            }
            return assetInfo.name
          },
          // 不生成 JS 文件
          entryFileNames: () => 'ignore.js'
        }
      }
    },
    plugins: [
      createHtmlPlugin({
        minify: !isDev,
        inject: {
          data: {
            title: "harmony-style-demo",
            description: "harmony-style",
          }
        }
      }),

      // 自定义插件：开发环境 CSS 热重载
      {
        name: 'css-hot-reload',
        apply: 'serve',
        handleHotUpdate({ file, server }) {
          if (file.endsWith('.less') || file.endsWith('.css')) {
            server.ws.send({
              type: 'full-reload',
              path: '*'
            })
          }
        }
      }
    ]
  };
});

